/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.sgc.manager;

import com.brain.core.dto.ParametroDto;
import com.brain.core.exception.DAOException;
import com.brain.core.hibernate.dao.DAOGenerico;
import com.brain.core.manager.ComunManager;
import com.brain.core.manager.RecursosManager;
import com.brain.sgc.dto.IdiomaDto;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

/**
 * @author Greip Company
 * @since 29/01/2014
 * @version 1.0
 */
@Service
public class IdiomaManager extends ComunManager<IdiomaDto> implements Serializable {

    /**
     * Objeto que permite el acceso a la capa de datos
     *
     * @since 29/01/2014
     */
    @Resource
    private DAOGenerico<IdiomaDto> springHibernateDao;
    /**
     * Guarda las acciones del sistema en un archivo de texto plano
     *
     * @since 29/01/2014
     */
    private static Logger logger = Logger.getLogger(IdiomaManager.class);
    /**
     * Objeto de la clase RecursosManager (acceso a metodos utilitarios)
     *
     * @since 29/01/2014
     */
    @Resource
    private RecursosManager recursosManager;

    /**
     * Metodo que permite instanciar un objeto y setear los atributos del dto de
     * la entidad
     *
     * @since 29/01/2014
     * @return retorna un dto
     */
    public IdiomaDto inicializar() {
        IdiomaDto idiomaDto = new IdiomaDto();
        return idiomaDto;
    }

    /**
     * Metodo que permite obtener una lista de idiomas por el dto enviado
     *
     * @since 29/01/2014
     * @param dto objeto que contiene los valores a filtrar
     * @return retorna una lista de idiomas
     */
    public List<IdiomaDto> obtenerIdiomaPorDto(IdiomaDto dto) throws DAOException {
        List<Object> listaParametros = new ArrayList<Object>();
        String hqsql = "select i from IdiomaDto as i where ";
        hqsql += " i.escrito = '" + dto.getEscrito() + "'";
        hqsql += " and i.oral = '" + dto.getOral() + "'";
        hqsql += " and i.idiomaDto.id = " + dto.getIdiomaDto().getId();
        hqsql += " and i.personaDto.id = " + dto.getPersonaDto().getId();
        System.out.println(hqsql);
        return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
    }

    /**
     * Metodo que permite obtener la cantidad de idiomas que tiene una persona
     *
     * @since 29/01/2014
     * @param dto objeto que sirve de filtro para la consulta
     * @return retorna un numero de idiomas
     * @throws DAOException
     */
    public int obtenerCantidad(IdiomaDto dto) throws DAOException {
        List<Object> listaParametros = new ArrayList<Object>();
        String hqsql = "select count(i.id) from IdiomaDto as i ";
        hqsql += " where i.idiomaDto.id = ? and i.personaDto.id = ?";
        listaParametros.add(dto.getIdiomaDto().getId());
        listaParametros.add(dto.getPersonaDto().getId());
        return Integer.parseInt(springHibernateDao.ejecutarQueryGeneric(hqsql, listaParametros).get(0).toString());
    }
}
